package com.cougil.uoc.seghismed.action;

import java.util.Date;

import com.cougil.uoc.seghismed.business.MetgeClientService;
import com.cougil.uoc.seghismed.model.Metge;
import com.cougil.uoc.seghismed.model.Pacient;
import com.cougil.uoc.seghismed.model.Visita;
import com.cougil.uoc.seghismed.utils.SeghismedUtils;
import com.opensymphony.xwork2.Action;

public class VisitaAction extends SeghismedAction {

	private static final long serialVersionUID = 4129893374494860258L;

	private String anamnesi;
	private String dataHora;
	private String diagnosi;
	private Integer id;
	private Integer idPacient;
	private Metge metge;
	private Pacient pacient;
	private String tema;
	private String tractament;
	private Visita visita;

	public VisitaAction() {
	}

	public String cancel() {
		this.resetVisita();
		return "cancel";
	}

	public String createVisita() {
		// tornem a associar el metge, per poder mostrar com a mínim les seves dades principals
		this.metge = (Metge) this.getClientService().getUsuari();
		// tornem a associar el pacient, per poder-li associar la visita creada
		this.pacient = this.getClientService().consultarPacient(new Pacient(this.getIdPacient()));
		// initialitzem la visita amb les dades del formulari
		this.inicialitzarVisita();
		// afegim la visita corresponent
		this.getClientService().afegirVisita(this.pacient, this.visita);
		// fem un reset dels camps
		this.resetVisita();
		return Action.SUCCESS;
	}

	/**
	 * @return Retorna el valor de la propietat anamnesi
	 */
	public String getAnamnesi() {
		return this.anamnesi;
	}

	/* (non-Javadoc)
	 * @see com.cougil.uoc.seghismed.action.SeghismedAction#getClientService()
	 */
	@Override
	protected MetgeClientService getClientService() {
		return (MetgeClientService) this.clientService;
	}

	/**
	 * @return Retorna el valor de la propietat dataHora
	 */
	public String getDataHora() {
		if (this.dataHora == null) {
			this.dataHora = SeghismedUtils.formatDate(new Date(), SeghismedUtils.LONG_DATE_AND_HOUR);
		}
		return this.dataHora;
	}

	/**
	 * @return Retorna el valor de la propietat diagnosi
	 */
	public String getDiagnosi() {
		return this.diagnosi;
	}

	/**
	 * @return Retorna el valor de la propietat id
	 */
	public Integer getId() {
		return this.id;
	}

	/**
	 * @return Retorna el valor de la propietat idPacient
	 */
	public Integer getIdPacient() {
		return this.idPacient;
	}

	/**
	 * @return Retorna el valor de la propietat metge
	 */
	public Metge getMetge() {
		if (this.metge == null) {
			// tornem a associar el metge, per poder mostrar com a mínim les seves dades principals
			this.metge = (Metge) this.getClientService().getUsuari();
		}
		return this.metge;
	}

	/**
	 * @return Retorna el valor de la propietat pacient
	 */
	public Pacient getPacient() {
		if (this.pacient == null) {
			// tornem a associar el pacient, pel mateix motiu
			this.pacient = this.getClientService().consultarPacient(new Pacient(this.getIdPacient()));
		}
		return this.pacient;
	}

	/**
	 * @return Retorna el valor de la propietat tema
	 */
	public String getTema() {
		return this.tema;
	}




	/**
	 * @return Retorna el valor de la propietat tractament
	 */
	public String getTractament() {
		return this.tractament;
	}

    /**
	 * @return Retorna el valor de la propietat visita
	 */
	public Visita getVisita() {
		if (this.visita == null) {
			this.pacient = this.getPacient();
			if (this.getId() != null) {
				// consultem la visita corresponent
				this.visita = this.getClientService().consultarVisita(this.pacient, new Visita(this.getId()));
			}
		}
		return this.visita;
	}

	private void inicialitzarVisita() {
		this.visita = new Visita();
		this.visita.setAnamnesi(this.getAnamnesi());
		this.visita.setDataHora(SeghismedUtils.parseDate(this.getDataHora(), SeghismedUtils.LONG_DATE_AND_HOUR));
		this.visita.setDiagnosi(this.getDiagnosi());
		this.visita.setTema(this.getTema());
		this.visita.setTractament(this.getTractament());
	}

	private void resetVisita() {
		this.setAnamnesi(null);
		this.setDataHora(null);
		this.setDiagnosi(null);
		this.setTema(null);
		this.setTractament(null);
		this.setVisita(null);
	}

	/**
	 * @param Estableix anamnesi com a valor de la propietat anamnesi
	 */
	public void setAnamnesi(String anamnesi) {
		this.anamnesi = anamnesi;
	}


	/**
	 * @param Estableix dataHora com a valor de la propietat dataHora
	 */
	public void setDataHora(String dataHora) {
		this.dataHora = dataHora;
	}

	/**
	 * @param Estableix diagnosi com a valor de la propietat diagnosi
	 */
	public void setDiagnosi(String diagnosi) {
		this.diagnosi = diagnosi;
	}

	/**
	 * @param Estableix
	 *            id com a valor de la propietat id
	 */
	public void setId(Integer id) {
		this.id = id;
	}

	/**
	 * @param Estableix
	 *            idPacient com a valor de la propietat idPacient
	 */
	public void setIdPacient(Integer idPacient) {
		this.idPacient = idPacient;
	}

	/**
	 * @param Estableix metge com a valor de la propietat metge
	 */
	public void setMetge(Metge metge) {
		this.metge = metge;
	}

	public void setPacient(Pacient p) {
		this.pacient = p;
	}

	/**
	 * @param Estableix tema com a valor de la propietat tema
	 */
	public void setTema(String tema) {
		this.tema = tema;
	}

	/**
	 * @param Estableix tractament com a valor de la propietat tractament
	 */
	public void setTractament(String tractament) {
		this.tractament = tractament;
	}

	/**
	 * @param Estableix visita com a valor de la propietat visita
	 */
	public void setVisita(Visita visita) {
		this.visita = visita;
	}


}
